/**
 * 就这美 2017
 */
package com.xjoyt.pay.util;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.Locale;

/**
 * 
 * @版权：就这美 版权所有 (c) 2017
 * @ClassName:ExceptionUtil
 * @author liangzhm<br/>
 * @email liangzhm1985@foxmail.com
 * @version Revision 1.0.0
 * @since JDK 1.7
 * @创建日期：2017年5月5日下午3:58:38
 * @功能说明：
 * 
 */
public class DateUtil {

	public final static String CST_DATE_FORMAT = "EE MM dd HH:mm:ss 'CST' yyyy";
	public final static String YYYYMMDDHH24MISS = "yyyyMMddHHmmss";
	public final static String YYYYMMDDHH24MISSSSS = "yyyyMMddHHmmssSSS";
	public final static String DEFAULT_PATTERN = "yyyy-MM-dd HH:mm:ss";
	public final static String YYYY_MM_DDHH24MISS = "yyyy-MM-ddHH:mm:ss";
	public final static String YYYYMMDD = "yyyyMMdd";
	public final static String YYYY_MM_DD = "yyyy-MM-dd";
	public final static String YYYYMM = "yyyyMM";
	public final static String HH24MISS = "HHmmss";

	/**
	 * 获取当前时间.
	 * 
	 * @return 返回时间格式为YYYYMMDDHH24MISS的字符串
	 */
	public static String getCurrDate() {
		return formatDate(new Date(), DEFAULT_PATTERN);
	}

	/**
	 * 获取当前时间.
	 * 
	 * @param dateFormat
	 *            时间格式
	 * @return 返回指定时间格式的字符串
	 */
	public static String getCurrDate(String dateFormat) {
		return formatDate(new Date(), dateFormat);
	}

	/**
	 * 将时间格式为YYYYMMDDHH24MISS的字符串转化为Date.
	 * 
	 * @param dateStr
	 *            时间格式为YYYYMMDDHH24MISS的字符串
	 * @return Date
	 */
	public static Date parseDate(String dateStr) {
		return parseDate(dateStr, DEFAULT_PATTERN);
	}

	public static Date parseDateCST(String dateStr) {
		Date date = null;
		if (dateStr == null) {
			return date;
		}
		if (dateStr.contains("Jan")) {
			dateStr = dateStr.replace("Jan", "01");
		} else if (dateStr.contains("Feb")) {
			dateStr = dateStr.replace("Feb", "02");
		} else if (dateStr.contains("Mar")) {
			dateStr = dateStr.replace("Mar", "03");
		} else if (dateStr.contains("Apr")) {
			dateStr = dateStr.replace("Apr", "04");
		} else if (dateStr.contains("May")) {
			dateStr = dateStr.replace("May", "05");
		} else if (dateStr.contains("Jun")) {
			dateStr = dateStr.replace("Jun", "06");
		} else if (dateStr.contains("Jul")) {
			dateStr = dateStr.replace("Jul", "07");
		} else if (dateStr.contains("Aug")) {
			dateStr = dateStr.replace("Aug", "08");
		} else if (dateStr.contains("Sep")) {
			dateStr = dateStr.replace("Sep", "09");
		} else if (dateStr.contains("Oct")) {
			dateStr = dateStr.replace("Oct", "10");
		} else if (dateStr.contains("Nov")) {
			dateStr = dateStr.replace("Nov", "11");
		} else if (dateStr.contains("Dec")) {
			dateStr = dateStr.replace("Dec", "12");
		}
		SimpleDateFormat sdf = new SimpleDateFormat(CST_DATE_FORMAT, Locale.US);
		try {
			date = sdf.parse(dateStr);
			return date;
		} catch (ParseException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		return date;
	}

	/**
	 * 根据给定的格式把时间字符串转化为Date.
	 * 
	 * @param dateStr
	 *            dateFormat时间格式的字符串
	 * @param dateFormat
	 *            时间格式
	 * @return Date
	 */
	public static Date parseDate(String dateStr, String dateFormat) {
		/*
		 * if (StringHelper.isEmpty(dateStr)) { return null; }
		 */

		SimpleDateFormat df = new SimpleDateFormat(dateFormat);
		try {
			return df.parse(dateStr);
		} catch (Exception ex) {
			// throw new RtManagerException("can not parse to date", ex);
		}
		return null;
	}

	public static String formatDate() {
		return formatDate(new Date());
	}

	public static String formatDate(String format) {
		return formatDate(new Date(), format);
	}

	/**
	 * Date转化为YYYYMMDDHH24MISS格式的字符串.
	 * 
	 * @param date
	 *            Date
	 * @return YYYYMMDDHH24MISS格式的字符串
	 */
	public static String formatDate(Date date) {
		return formatDate(date, DEFAULT_PATTERN);
	}

	/**
	 * 日期格式化处理,去掉时或分或秒,即：将时分秒设置为0 formatDateToDate
	 * 
	 * @author liangzhm
	 * @param date
	 * @param format
	 * @return
	 * @创建日期：2015年6月8日下午3:07:12
	 */
	public static Date formatDateToDate(Date date, String format) {
		String _date = formatDate(date, format);
		return parseDate(_date, format);
	}

	/**
	 * 月份处理，在当前日期上增加或减少月份 operationMonth
	 * 
	 * @author liangzhm
	 * @param currentDate
	 * @param num
	 * @return
	 * @创建日期：2015年6月8日下午3:13:55
	 */
	public static Date operationMonth(Date currentDate, int num) {
		Calendar calendar = Calendar.getInstance();
		calendar.setTime(currentDate);
		calendar.add(Calendar.MONTH, num);
		return calendar.getTime();
	}

	/**
	 * Date转化为dateFormat时间格式的字符串
	 * 
	 * @param date
	 *            Date
	 * @param dateFormat
	 *            时间格式
	 * @return dateFormat时间格式的字符串
	 */
	public static String formatDate(Date date, String dateFormat) {
		if (date == null) {
			return null;
		}
		SimpleDateFormat df = new SimpleDateFormat(dateFormat);
		return df.format(date);
	}

}
